<!--
    CyberChef - The Cyber Swiss Army Knife

    @copyright Crown Copyright 2016-2025
    @license Apache-2.0

      Copyright 2016-2025 Crown Copyright

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    Modified by Raka-loah@github for zh-CN i18n and renamed.
-->
<!DOCTYPE html>
<html lang="zh-Hans" class="classic">

<head>
  <meta charset="UTF-8">
  <title>SRK Toolbox</title>
  <meta name="copyright"
    content="Crown Copyright 2016 (CyberChef) Raka-loah@github Copyright 2024 (Modifications)-2025">
  <meta name="description"
    content="A web app (based on CyberChef) for encryption, encoding, compression and data analysis">
  <meta name="keywords"
    content="base64, hex, decode, encode, encrypt, decrypt, compress, decompress, regex, regular expressions, hash, crypt, hexadecimal, user agent, url, certificate, x.509, parser, JSON, gzip,  md5, sha1, aes, des, blowfish, xor">
  <link rel="icon" type="image/ico" href="assets/278803826f25f587bbae.ico">
  <script
    type="application/javascript">"use strict"; try { document.querySelector(":root").className = (JSON.parse(localStorage.getItem("options")) || {}).theme } catch (e) { } var loadingMsgs = ["正在证明 P = NP...", "正在计算 6 x 9...", "正在挖比特币（并没有啦）...", "正在计算1除以0...", "正在初始化Skynet...", "[已重置]", "正在下载更多内存...", "正在给0和1排序...", "正在访问神经网格...", "正在导入机器学习功能...", "正在给Alice和Bob发一次性密码本...", "正在挖比特币现金...", "正在生成随机字符串以尝试退出vim...", "for i in range(additional): Pylon()", "(激化你的强迫症...", "正在把emacs和vim符号链接到ed...", "正在训练分支预测...", "正在对缓存命中计时...", "正在猜你要执行什么操作...", "正在添加使用了大型语言模型的错觉...", "解压恶意软件中（吓你的）..."]; for (let e = loadingMsgs.length - 1; e > 0; --e) { var j = Math.floor(Math.random() * (e + 1)), temp = loadingMsgs[e]; loadingMsgs[e] = loadingMsgs[j], loadingMsgs[j] = temp } function changeLoadingMsg() { var e = loadingMsgs.shift(); loadingMsgs.push(e); try { var n = document.getElementById("preloader-msg"); n.classList.contains("loading") || n.classList.add("loading"), n.innerHTML = e } catch (e) { setTimeout(changeLoadingMsg, 1e3) } } function loadingErrorHandler(e) { function n(e) { var n = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#x27;", "/": "&#x2F;", "`": "&#x60;" }; return e.replace(/[&<>"'/`]/g, (function (e) { return n[e] })) } var o = e.message + (e.filename ? "\n文件名： " + e.filename : "") + (e.lineno ? "\n行： " + e.lineno : "") + (e.colno ? "\n列： " + e.colno : "") + (e.error ? "\n错误： " + e.error : "") + "\nUser-Agent： " + navigator.userAgent + "\nSRK Toolbox版本： 10.19.4"; clearInterval(window.loadingMsgsInt), document.getElementById("preloader").remove(), document.getElementById("preloader-msg").remove(), document.getElementById("preloader-error").innerHTML = "SRK Toolbox 载入时遇到错误。<br><br>仅支持以下版本的浏览器：<ul><li>Google Chrome 50+</li><li>Mozilla Firefox 38+</li></ul>你的User Agent是：<br>" + n(navigator.userAgent) + "<br><br><pre>" + n(o) + "</pre>" } changeLoadingMsg(), window.loadingMsgsInt = setInterval(changeLoadingMsg, 2e3 * Math.random() + 1500), window.addEventListener("error", loadingErrorHandler)</script>
  <script defer="defer" src="assets/main.js"></script>
  <link href="assets/main.css" rel="stylesheet">
</head>

<body>
  <div id="loader-wrapper">
    <div id="preloader" class="loader"></div>
    <div id="preloader-msg" class="loading-msg"></div>
    <div id="preloader-error" class="loading-error"></div>
  </div><button type="button" aria-label="Edit Favourites" class="btn btn-warning bmd-btn-icon" id="edit-favourites"
    data-toggle="tooltip" title="编辑收藏"><i class="material-icons" aria-hidden="true">star</i></button>
  <div id="content-wrapper">
    <div id="banner" class="row">
      <div class="col" style="text-align:left;padding-left:10px"><span>版本 10.19.4</span></div>
      <div class="col-md-6" id="notice-wrapper"><span id="notice">
          <script
            type="text/javascript">navigator.userAgent && navigator.userAgent.match(/Trident/) && (document.getElementById("notice").innerHTML += "不支持IE浏览器，请使用Firefox或Chrome。", alert("不支持IE浏览器，请使用Firefox或Chrome。"))</script>
          <noscript>JavaScript未启用。自求多福吧。</noscript>
        </span></div>
      <div class="col" style="text-align:right;padding-right:0"><a href="#" id="options" data-help-title="设置项"
          data-help="这些设置项目用于调整SRK Toolbox的行为。设置都储存在浏览器的本地存储，因此只要不彻底清掉缓存的话，设置项在同一个浏览器会一直保留，不用每次都重新调整。">设置 <i
            class="material-icons">settings</i></a> <a href="#" id="support" data-toggle="modal"
          data-target="#support-modal" data-help-title="关于 / 帮助" data-help="这里提供了SRK Toolbox的基本信息，一些使用帮助以及bug的提交方法。">关于
          / 帮助 <i class="material-icons">help</i></a></div>
    </div>
    <div id="workspace-wrapper">
      <div id="operations" class="split split-horizontal no-select">
        <div class="title no-select" data-help-title="可用操作列表"
          data-help="<p>可用操作列表按类型列出当前SRK Toolbox中所有可用的数据操作。有些操作可能会出现在多个类别中。可以使用搜索框来搜索需要的操作。</p><p>双击或者将操作拖动到操作流程框中来使用。你可以在操作流程框中调整对应的参数。</p>">
          可用操作 <span class="op-count"></span></div><input id="search" type="search" class="form-control"
          placeholder="搜索..." autocomplete="off" tabindex="2" data-help-title="搜索可用操作"
          data-help="<p>使用搜索框来查找需要的操作。</p><p>操作名称和描述内容都可以被模糊搜索。</p>">
        <ul id="search-results" class="op-list"></ul>
        <div id="categories" class="panel-group no-select"></div>
      </div>
      <div id="recipe" class="split split-horizontal no-select" data-help-title="操作流程框"
        data-help="<p>操作流程框是设置选定操作的执行顺序与参数的地方。如果你是程序猿的话，把这些当作函数就行。如果你对编程不甚了解，你就当这地方是个菜谱（CyberChef的本意就是“赛博大厨”）：输入的数据会根据“菜谱”里的操作进行处理。</p><ul><li>改变运行顺序只需要简单的拖拽。</li><li>删除某个操作可以直接双击它，或者把它拖出操作流程框。</li></ul><p>操作的各种参数可以手动修改来调整每个操作的效果。</p>">
        <div class="title no-select">操作流程 <span class="pane-controls hide-on-maximised-output"><button type="button"
              aria-label="Hide arguments" class="btn btn-primary bmd-btn-icon" id="hide-icon" data-toggle="tooltip"
              title="隐藏参数" hide-args="false" data-help-title="隐藏每个操作的参数部分"
              data-help="点击“隐藏参数”会把列表中所有操作的参数设置部分隐藏掉，这样比较节省显示空间，适用于你拖了特别多操作在里面的时候。"><i
                class="material-icons">keyboard_arrow_up</i></button> <button type="button" aria-label="Save recipe"
              class="btn btn-primary bmd-btn-icon" id="save" data-toggle="tooltip" title="保存流程" data-help-title="保存操作流程"
              data-help="<p>操作流程可以用不同格式表示，然后保存留待后续使用。你可以把操作流程复制下来保存到文件里，或者存到浏览器的本地存储当中。</p><ul><li><b>直链：</b>最简单的方法是保存一个直链，可以直接从地址栏复制（当输入内容或流程改变时会自动更新），或者从“保存流程”框中复制。当你访问这个链接的时候，输入内容和操作流程会自动恢复。</li><li><b>流程文本：</b>特殊的文本格式，简短而且具有一定可读性。这是用在地址栏当中的格式。</li><li><b>JSON格式：</b> 使用空格和缩进的JSON文本，比较可读。</li><li><b>精简JSON：</b>精简过的JSON，可读性差一些。</li><li><b>本地存储：</b>你可以给操作流程起个名字直接保存到浏览器的本地存储。不清理缓存的情况下，同一个浏览器可以直接从“载入流程”功能中载入之前保存的流程。注意：如果浏览器本地存储被清空了，这些流程和数据也没了。</li></ul>"><i
                class="material-icons" aria-hidden="true">save</i></button> <button type="button"
              aria-label="Load recipe" class="btn btn-primary bmd-btn-icon" id="load" data-toggle="tooltip" title="载入流程"
              data-help-title="载入操作流程"
              data-help="<p>之前保存过的流程可以用以下方式载入：</p><ul><li>如果你保存了直链，直接在浏览器访问那个直链即可，数据和流程会自动恢复。</li><li>如果你有之前保存的文本格式，粘贴到“载入流程”框里然后点击“载入”即可。</li><li>如果你把流程保存到了浏览器本地存储，那么“载入流程”框的下拉列表里应该直接能选到。如果选不到，确认下是不是浏览器缓存被清空过，那样的话之前的数据就没了。</li></ul>"><i
                class="material-icons" aria-hidden="true">folder</i></button> <button type="button"
              aria-label="Clear recipe" class="btn btn-primary bmd-btn-icon" id="clr-recipe" data-toggle="tooltip"
              title="清除流程" data-help-title="清除操作流程"
              data-help="点击“清除流程”按钮会把整个操作流程列表清空。不影响输入框的数据，但如果“自动执行”勾选上了，输出框的内容会因此改变。"><i class="material-icons"
                aria-hidden="true">delete</i></button></span></div>
        <ul id="rec-list" class="list-area no-select"></ul>
        <div id="controls" class="no-select hide-on-maximised-output">
          <div id="controls-content"><button type="button" class="mx-2 btn btn-lg btn-secondary" id="step"
              data-toggle="tooltip" title="分步执行流程" data-help-title="分步执行流程"
              data-help="<p>“步进”按钮让你一次执行一个操作，而不是一次把整个操作列表都执行完。</p><p>步进功能让你可以清晰地看到每一步执行的输出。</p>"
              style="white-space:nowrap">步进</button> <button type="button"
              class="mx-2 btn btn-lg btn-success btn-raised btn-block" id="bake" data-help-title="执行"
              data-help="<p>“执行”顾名思义就是将流程执行一遍。内部一共是三个步骤：</p><ol><li>输入框的数据按照输入框状态栏里选定的字符集编码成字节数据。</li><li>数据从每个操作中过一遍，下一步的输入数据从上一步的输出数据中来。</li><li>最终的输出结果使用输出框状态栏选定的字符集来解码。</li></ol><p>如果有多个输入数据，执行按钮会让它们同时执行。</p>"><img
                aria-hidden="true" src="images/multitool-32x32.png" alt="执行图标"> <span>执行！</span></button>
            <div class="form-group" style="display:contents">
              <div class="mx-1 checkbox" data-help-title="自动执行"
                data-help="<p>当“自动执行”勾选上的时候，输入内容或操作流程发生变化时，输出会自动更新。</p>包括：<ul><li>增加或删除操作</li><li>修改操作参数</li><li>修改输入内容</li><li>修改输入字符集</li></ul><p>如果有多个输入，只会触发当前选中标签的输出。如果需要全部执行，需手工点击执行按钮。</p>">
                <label id="auto-bake-label"><input type="checkbox" checked="checked" id="auto-bake"><br>自动执行</label>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="split split-horizontal" id="IO">
        <div id="input" class="split no-select" data-help-title="输入框"
          data-help="<p>输入数据可以直接敲进去、复制粘贴进去、鼠标拖进去或者使用“载入文件”或“载入文件夹”按钮。</p><p>程序会尽量尝试把文件内容准确显示。非打印字符会使用图片的形式显示，例如一个空字节（0x00）会显示成这样： <span title='控制字符 null' aria-label='控制字符 null' class='cm-specialChar'>␀</span>。</p>">
          <div class="title no-select"><label for="input-text">输入</label> <span class="pane-controls">
              <div class="io-info" id="input-files-info"></div><button type="button" aria-label="Add new input tab"
                class="btn btn-primary bmd-btn-icon" id="btn-new-tab" data-toggle="tooltip" title="新标签页"
                data-help-title="标签页"
                data-help="<p>你可以创建多个标签页来支持多个输入数据。这些标签有独立的字符编码和换行符设定。</p><p>地址栏的直链只会显示 当前选中标签页的内容。</p>"><i
                  class="material-icons" aria-hidden="true">add</i></button> <button type="button"
                aria-label="Open folder as input" class="btn btn-primary bmd-btn-icon" id="btn-open-folder"
                data-toggle="tooltip" title="打开文件夹" data-help-title="打开文件夹"
                data-help="<p>你可以打开一整个文件夹，当中的每个文件都会显示到独立的标签页中。</p><p>支持同时打开很多文件，但浏览器性能会受到影响，尤其是文件很大的时候。</p><p>文件夹也可以直接用鼠标拖进输入框。</p>"><i
                  class="material-icons" aria-hidden="true">folder_open</i> <input type="file" id="open-folder"
                  style="display:none" multiple="multiple" directory webkitdirectory></button> <button type="button"
                aria-label="Open file as input" class="btn btn-primary bmd-btn-icon" id="btn-open-file"
                data-toggle="tooltip" title="打开文件" data-help-title="打开文件"
                data-help="<p>文件可以单独或者一起载入，使用打开文件按钮或者直接拖进输入框。</p><p>硬件足够给力的话，大文件（至少500MB）都是可以处理的，当然有些操作执行起来可能会变得超级慢。</p>"><i
                  class="material-icons" aria-hidden="true">input</i> <input type="file" id="open-file"
                  style="display:none" multiple="multiple"></button> <button type="button"
                aria-label="Clear input and output" class="btn btn-primary bmd-btn-icon" id="clr-io"
                data-toggle="tooltip" title="清空输入输出" data-help-title="清空输入输出"
                data-help="点击“清空输入输出”按钮会把输入和输出框的内容清空，不影响操作流程。"><i class="material-icons"
                  aria-hidden="true">delete</i></button> <button type="button" aria-label="Reset pane layout"
                class="btn btn-primary bmd-btn-icon" id="reset-layout" data-toggle="tooltip" title="重置窗口布局"
                data-help-title="重置窗口布局" data-help="界面的每个框都是能拖拽调整大小的，这个按钮把每个框的大小恢复成默认状态。"><i class="material-icons"
                  aria-hidden="true">view_compact</i></button>
            </span></div>
          <div id="input-wrapper" class="no-select">
            <div id="input-tabs-wrapper" style="display:none" class="no-select" data-help-proxy="#btn-new-tab"><span
                id="btn-previous-input-tab" class="input-tab-buttons">&lt; </span><span id="btn-input-tab-dropdown"
                class="input-tab-buttons" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">···</span>
              <div class="dropdown-menu" aria-labelledby="btn-input-tab-dropdown"><a id="btn-go-to-input-tab"
                  class="dropdown-item">转到标签 </a><a id="btn-find-input-tab" class="dropdown-item">查找标签 </a><a
                  id="btn-close-all-tabs" class="dropdown-item">关闭所有标签</a></div><span id="btn-next-input-tab"
                class="input-tab-buttons">&gt;</span>
              <ul id="input-tabs"></ul>
            </div>
            <div id="input-text"></div>
          </div>
        </div>
        <div id="output" class="split" data-help-title="Output pane"
          data-help="<p>输出框显示操作流程的结果。</p><p>SRK Toolbox会尽量尝试把文件内容准确显示。非打印字符会显示成图片的形式，例如一个空字节（0x00）会显示成这样： <span title='Control character null' aria-label='Control character null' class='cm-specialChar'>␀</span>.</p><p>当从输出框复制内容时，复制的是原本的字节数据而不是图片。</p>">
          <div class="title no-select"><label for="output-text">输出</label> <span class="pane-controls">
              <div class="io-info" id="bake-info"></div><button type="button" class="btn btn-primary bmd-btn-icon"
                id="save-all-to-file" data-toggle="tooltip" title="保存为压缩包" style="display:none"
                data-help-title="把所有的输出内容保存到ZIP压缩包"
                data-help="<p>当操作多个标签页的输入时，可以用这个按钮把处理结果打包成ZIP压缩包。</p><p>使用“执行”按钮来执行所有的输入内容。</p><p>你可以指定输出文件的扩展名，或者让程序自行检测，对于无法确定的类型，会使用“.dat”扩展名。</p>"><i
                  class="material-icons">archive</i></button> <button type="button" aria-label="save"
                class="btn btn-primary bmd-btn-icon" id="save-to-file" data-toggle="tooltip" title="保存到文件"
                data-help-title="保存输出内容到文件"
                data-help="将当前选中的输出数据储存到文件中。你可以指定文件名和扩展名。程序会尝试检测对应的扩展名，如果无法成功检测，则会默认使用“.dat”，可以手动修改。"><i
                  class="material-icons" aria-hidden="true">save</i></button> <button type="button"
                aria-label="copy content" class="btn btn-primary bmd-btn-icon" id="copy-output" data-toggle="tooltip"
                title="复制原始内容至剪贴板" data-help-title="复制原始输出内容至剪贴板"
                data-help="<p>输出框的数据支持常规的复制操作，但这个按钮提供了快速复制整个输出框内容的功能。此功能将直接复制原始数据到剪贴板，并不进行选中操作，对于特别长的内容效率可能会更高一些，因为不需要任何DOM交互。当然不管用哪种方式复制结果都是一样的。</p>"><i
                  class="material-icons" aria-hidden="true">content_copy</i></button> <button type="button"
                aria-label="replace input with output" class="btn btn-primary bmd-btn-icon" id="switch"
                data-toggle="tooltip" title="填写到输入框" data-help-title="将输出内容填写到输入框"
                data-help="<p>此按钮将当前选中的输出框内容覆盖到输入框中。</p><p>输入框的字符编码和换行符会自动调整为输出框的当前设定。</p>"><i class="material-icons"
                  aria-hidden="true">open_in_browser</i></button> <button type="button"
                aria-label="maximise output pane" class="btn btn-primary bmd-btn-icon" id="maximise-output"
                data-toggle="tooltip" title="最大化" data-help-title="最大化输出框"
                data-help="这个按钮会让输出框最大化，把可用操作栏、操作流程栏和输入框都隐藏掉。再点击一次会还原。"><i class="material-icons"
                  aria-hidden="true">fullscreen</i></button>
            </span><button type="button" class="btn btn-primary bmd-btn-icon hidden" id="magic" data-toggle="tooltip"
              title="Magic!" data-html="true" data-help-title="CyberChef Magic!"
              data-help="<p>Magic是CyberChef的卖点功能之一，可以根据输出内容自动检测可能需要的操作然后自动将其填入操作流程中。当输出内容可以匹配到某些操作时，Magic按钮就会出现。</p><p>点击按钮就可以自动把操作放入操作流程框中。</p><p>背后的检测算法默认会检测至多三层操作，如果需要更为精细的控制，使用“流程控制”当中的“Magic”操作。</p><p>CyberChef Magic的更多信息可参考<a href='https://github.com/gchq/CyberChef/wiki/Automatic-detection-of-encoded-data-using-CyberChef-Magic'>这个页面</a>。</p><p><em>没有把CyberChef的名称改掉，因为觉得那样有点不要face</em></p>"><svg
                width="22" height="22" viewBox="0 0 24 24">
                <path
                  d="M7.5,5.6L5,7L6.4,4.5L5,2L7.5,3.4L10,2L8.6,4.5L10,7L7.5,5.6M19.5,15.4L22,14L20.6,16.5L22,19L19.5,17.6L17,19L18.4,16.5L17,14L19.5,15.4M22,2L20.6,4.5L22,7L19.5,5.6L17,7L18.4,4.5L17,2L19.5,3.4L22,2M13.34,12.78L15.78,10.34L13.66,8.22L11.22,10.66L13.34,12.78M14.37,7.29L16.71,9.63C17.1,10 17.1,10.65 16.71,11.04L5.04,22.71C4.65,23.1 4,23.1 3.63,22.71L1.29,20.37C0.9,20 0.9,19.35 1.29,18.96L12.96,7.29C13.35,6.9 14,6.9 14.37,7.29Z" />
              </svg></button> <span id="stale-indicator" class="hidden" data-toggle="tooltip"
              title="输出内容已过期：输入或流程已被修改，需要重新执行获取最新结果。" data-help-title="内容过期指示"
              data-help="内容过期指输入或流程已被修改但没有执行，导致输出内容没有反映出最新改动。通常由于没有勾选“自动执行”然后修改了内容。"><i
                class="material-icons">access_time</i></span></div>
          <div id="output-wrapper" class="no-select">
            <div id="output-tabs-wrapper" style="display:none" class="no-select"><span id="btn-previous-output-tab"
                class="output-tab-buttons">&lt; </span><span id="btn-output-tab-dropdown" class="output-tab-buttons"
                data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">···</span>
              <div class="dropdown-menu" aria-labelledby="btn-input-tab-dropdown"><a id="btn-go-to-output-tab"
                  class="dropdown-item">转到标签 </a><a id="btn-find-output-tab" class="dropdown-item">查找标签</a></div><span
                id="btn-next-output-tab" class="output-tab-buttons">&gt;</span>
              <ul id="output-tabs"></ul>
            </div>
            <div id="output-text"></div>
            <div id="output-loader">
              <div id="output-loader-animation"><object id="bombe"
                  data=""
                  width="100%" height="100%" data-help-title="载入动画"
                  data-help="这里曾经是<a href='https://wikipedia.org/wiki/Bombe'>Bombe密码机</a>的载入动画。特别好奇的话可以去原版CyberChef看看。"></object>
              </div>
              <div class="loading-msg"></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="save-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content" data-help-proxy="#save">
        <div class="modal-header">
          <h5 class="modal-title">保存流程</h5>
        </div>
        <div class="modal-body">
          <div class="form-group">
            <ul class="nav nav-tabs" role="tablist">
              <li class="nav-item"><a class="nav-link active" href="#chef-format" role="tab" data-toggle="tab">流程文本</a>
              </li>
              <li class="nav-item"><a class="nav-link" href="#clean-json" role="tab" data-toggle="tab">JSON格式</a></li>
              <li class="nav-item"><a class="nav-link" href="#compact-json" role="tab" data-toggle="tab">精简JSON</a></li>
            </ul>
            <div class="tab-content" id="save-texts">
              <div role="tabpanel" class="tab-pane active" id="chef-format"><textarea class="form-control"
                  id="save-text-chef" rows="5"></textarea></div>
              <div role="tabpanel" class="tab-pane" id="clean-json"><textarea class="form-control" id="save-text-clean"
                  rows="5"></textarea></div>
              <div role="tabpanel" class="tab-pane" id="compact-json"><textarea class="form-control"
                  id="save-text-compact" rows="5"></textarea></div>
            </div>
          </div>
          <div class="form-group"><label for="save-name" class="bmd-label-floating">流程名称</label> <input type="text"
              class="form-control" id="save-name"> <span class="bmd-help">把流程保存下来，或者复制到别处以备下次使用。</span></div>
        </div>
        <div class="modal-footer" id="save-footer"><button type="button" class="btn btn-primary" id="save-button"
            data-dismiss="modal">保存</button> <button type="button" class="btn btn-secondary"
            data-dismiss="modal">完成</button></div>
        <div class="modal-body">
          <div class="form-group" id="save-link-group">
            <h6 style="display:inline">直链</h6>
            <div class="save-link-options"><label class="checkbox-inline"><input type="checkbox"
                  id="save-link-recipe-checkbox" checked="checked"> 包含流程</label> <label class="checkbox-inline"><input
                  type="checkbox" id="save-link-input-checkbox" checked="checked"> 包含输入</label></div><br><br><a
              id="save-link" style="word-wrap:break-word"></a>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="load-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content" data-help-proxy="#load">
        <div class="modal-header">
          <h5 class="modal-title">载入流程</h5>
        </div>
        <div class="modal-body">
          <div class="form-group"><label for="load-name" class="bmd-label-floating">流程名称</label> <select
              class="form-control" id="load-name"></select> <span class="bmd-help">在下拉框选择需要载入的流程名称。</span></div>
          <div class="form-group"><label for="load-text" class="bmd-label-floating">流程文本</label> <textarea
              class="form-control" id="load-text" rows="5"></textarea> <span class="bmd-help">把之前保存的流程文本粘贴到输入框。</span>
          </div>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-primary" id="load-button"
            data-dismiss="modal">载入</button> <button type="button" class="btn btn-danger"
            id="load-delete-button">删除</button> <button type="button" class="btn btn-secondary"
            data-dismiss="modal">取消</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="options-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content" data-help-proxy="#options">
        <div class="modal-header">
          <h5 class="modal-title">设置</h5>
        </div>
        <div class="modal-body" id="options-body">
          <p style="font-weight:700">注意：以下设置在你清理浏览器缓存之前会一直生效。</p>
          <div class="form-group option-item"><label for="theme" class="bmd-label-floating">主题（不支持老旧浏览器）</label> <select
              class="form-control" option="theme" id="theme">
              <option value="classic">经典</option>
              <option value="dark">暗黑</option>
              <option value="geocities">GeoCities</option>
              <option value="solarizedDark">Solarized Dark</option>
              <option value="solarizedLight">Solarized Light</option>
            </select></div>
          <div class="form-group option-item"><label for="logLevel" class="bmd-label-floating">日志输出级别</label> <select
              class="form-control" option="logLevel" id="logLevel">
              <option value="silent">Silent</option>
              <option value="error">Error</option>
              <option value="warn">Warn</option>
              <option value="info">Info</option>
              <option value="debug">Debug</option>
              <option value="trace">Trace</option>
            </select></div>
          <div class="checkbox option-item"><label for="updateUrl"><input type="checkbox" option="updateUrl"
                id="updateUrl" checked="checked"> 流程或输入改变时自动更新URL</label></div>
          <div class="checkbox option-item"><label for="showHighlighter"><input type="checkbox" option="showHighlighter"
                id="showHighlighter" checked="checked"> 高亮输入输出框中被选中的字节</label></div>
          <div class="checkbox option-item"><label for="wordWrap"><input type="checkbox" option="wordWrap" id="wordWrap"
                checked="checked"> 对输入输出自动换行（Word wrap）</label></div>
          <div class="checkbox option-item mb-0"><label for="showErrors"><input type="checkbox" option="showErrors"
                id="showErrors" checked="checked"> 显示操作运行时的报错信息（推荐打开）</label></div>
          <div class="form-group option-item"><label for="errorTimeout"
              class="bmd-label-floating">操作运行错误超时毫秒数（0为不限制）</label> <input type="number" class="form-control"
              option="errorTimeout" id="errorTimeout"></div>
          <div class="checkbox option-item"><label for="useMetaKey"><input type="checkbox" option="useMetaKey"
                id="useMetaKey"> 在快捷键中使用系统功能键 (Windows ⊞/Command ⌘)</label></div>
          <div class="checkbox option-item"><label for="autoMagic"><input type="checkbox" option="autoMagic"
                id="autoMagic"> 自动探测输入格式（就是有这样的操作！）</label></div>
          <div class="checkbox option-item"><label for="imagePreview"><input type="checkbox" option="imagePreview"
                id="imagePreview"> 如果检测到输入的内容是图像格式，显示图像</label></div>
          <div class="checkbox option-item"><label for="syncTabs"><input type="checkbox" option="syncTabs"
                id="syncTabs"> 同步选中对应的输入和输出标签页</label></div>
          <div class="checkbox option-item"><label for="showCatCount"><input type="checkbox" option="showCatCount"
                id="showCatCount"> 显示每个分类的操作数目</label></div>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-secondary" id="reset-options">恢复默认值</button>
          <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="favourites-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content" data-help-proxy="a[data-target='#catFavourites']">
        <div class="modal-header">
          <h5 class="modal-title">编辑收藏</h5>
        </div>
        <div class="modal-body" id="favourites-body">
          <ul>
            <li><span style="font-weight:700">添加：</span>把操作直接拖到收藏分类上面</li>
            <li><span style="font-weight:700">调整顺序：</span>直接在列表里上下拖动</li>
            <li><span style="font-weight:700">移除：</span>按删除按钮或者直接拖出去</li>
          </ul><br>
          <ul id="edit-favourites-list" class="op-list"></ul>
          <div class="option-item"></div>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-secondary" data-dismiss="modal"
            id="reset-favourites">恢复默认收藏</button> <button type="button" class="btn btn-success" data-dismiss="modal"
            id="save-favourites">保存</button> <button type="button" class="btn btn-danger"
            data-dismiss="modal">取消</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="support-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content" data-help-proxy="#support">
        <div class="modal-header">
          <h5 class="modal-title">SRK Toolbox<small> - Smiling RaKa Toolbox</small></h5>
        </div>
        <div class="modal-body"><img aria-hidden="true" class="about-img-left" src="images/srk-128x128.png"
            alt="SRK Toolbox Logo">
          <p class="subtext">基于CyberChef版本： 10.19.4<br>编译时间： 08/01/2025 08:12:26 UTC</p>
          <p><strong>S</strong>miling <strong>R</strong>a<strong>K</strong>a Toolbox是一个非常好用（自称）的网页版编解码加解密工具箱。</p>
          <p>套壳自<a href="https://github.com/gchq/CyberChef" target="_blank">CyberChef - The Cyber Swiss Army Knife</a>
          </p>
          <p>Based on CyberChef &copy; Crown Copyright 2016-2025. Released under the Apache Licence, Version 2.0.</p>
          <ul class="nav nav-tabs" role="tablist">
            <li class="nav-item" role="presentation"><a class="nav-link active" href="#faqs" aria-controls="profile"
                role="tab" data-toggle="tab">FAQ</a></li>
            <li class="nav-item" role="presentation"><a class="nav-link" href="#report-bug" aria-controls="messages"
                role="tab" data-toggle="tab">报告Bug</a></li>
            <li class="nav-item" role="presentation"><a class="nav-link" href="#about" aria-controls="messages"
                role="tab" data-toggle="tab">关于</a></li>
            <li class="nav-item" role="presentation"><a class="nav-link" href="#keybindings" aria-controls="messages"
                role="tab" data-toggle="tab">快捷键</a></li>
          </ul>
          <div class="tab-content">
            <div role="tabpanel" class="tab-pane active" id="faqs" data-help-title="常见问题框"
              data-help="常见问题框用于解答一些常见问题。对，就这些。"><br><a class="btn btn-primary" data-toggle="collapse"
                data-target="#faq-contextual-help">某个功能是怎么用的？</a>
              <div class="collapse" id="faq-contextual-help">
                <p>SRK Toolbox具有上下文帮助功能。只要把鼠标放在需要解释的模块上面，按<code>F1</code>就能获得帮助信息。你可以现在就试试把鼠标放这里按<code>F1</code>！</p>
              </div><br><a class="btn btn-primary" data-toggle="collapse" data-target="#faq-examples">我用SRK
                Toolbox能干什么？</a>
              <div class="collapse" id="faq-examples">
                <p>SRK Toolbox有<span class="num-ops">数百种</span>操作可以使用，可以方便地搞定很多编解码操作。以下是一些例子：</p>
                <ul>
                  <li><a
                      href="#recipe=Base64解码('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1">Base64字符串解码</a>
                  </li>
                  <li><a
                      href="#recipe=转换DateTime格式('Standard%20date%20and%20time','DD/MM/YYYY%20HH:mm:ss','UTC','dddd%20Do%20MMMM%20YYYY%20HH:mm:ss%20Z%20z','Australia/Queensland')&input=MTUvMDYvMjAxNSAyMDo0NTowMA">把日期时间转换到别的时区</a>
                  </li>
                  <li><a href="#recipe=解析IPv6地址()&input=MjAwMTowMDAwOjQxMzY6ZTM3ODo4MDAwOjYzYmY6M2ZmZjpmZGQy">解析Teredo
                      IPv6地址</a></li>
                  <li><a
                      href="#recipe=从Hexdump提取()Gunzip()&input=MDAwMDAwMDAgIDFmIDhiIDA4IDAwIDEyIGJjIGYzIDU3IDAwIGZmIDBkIGM3IGMxIDA5IDAwIDIwICB8Li4uLi6881cu/y7HwS4uIHwKMDAwMDAwMTAgIDA4IDA1IGQwIDU1IGZlIDA0IDJkIGQzIDA0IDFmIGNhIDhjIDQ0IDIxIDViIGZmICB8Li7QVf4uLdMuLsouRCFb/3wKMDAwMDAwMjAgIDYwIGM3IGQ3IDAzIDE2IGJlIDQwIDFmIDc4IDRhIDNmIDA5IDg5IDBiIDlhIDdkICB8YMfXLi6%2BQC54Sj8uLi4ufXwKMDAwMDAwMzAgIDRlIGM4IDRlIDZkIDA1IDFlIDAxIDhiIDRjIDI0IDAwIDAwIDAwICAgICAgICAgICB8TshObS4uLi5MJC4uLnw">把数据从Hexdump恢复，然后解压缩</a>
                  </li>
                  <li><a
                      href="#recipe=RC4(%7B'option':'UTF8','string':'secret'%7D,'十六进制','十六进制')x86反汇编('64','Full%20x86%20architecture',16,0,true,true)&input=MjFkZGQyNTQwMTYwZWU2NWZlMDc3NzEwM2YyYTM5ZmJlNWJjYjZhYTBhYWJkNDE0ZjkwYzZjYWY1MzEyNzU0YWY3NzRiNzZiM2JiY2QxOTNjYjNkZGZkYmM1YTI2NTMzYTY4NmI1OWI4ZmVkNGQzODBkNDc0NDIwMWFlYzIwNDA1MDcxMzhlMmZlMmIzOTUwNDQ2ZGIzMWQyYmM2MjliZTRkM2YyZWIwMDQzYzI5M2Q3YTVkMjk2MmMwMGZlNmRhMzAwNzJkOGM1YTZiNGZlN2Q4NTlhMDQwZWVhZjI5OTczMzYzMDJmNWEwZWMxOQ">解密然后反汇编</a>
                  </li>
                  <li><a
                      href="#recipe=Fork('%5C%5Cn','%5C%5Cn',false)从UNIX时间戳提取('秒%20(s)')&input=OTc4MzQ2ODAwCjEwMTI2NTEyMDAKMTA0NjY5NjQwMAoxMDgxMDg3MjAwCjExMTUzMDUyMDAKMTE0OTYwOTYwMA">把多个时间戳转换成日期时间</a>
                  </li>
                  <li><a
                      href="#recipe=Fork('%5C%5Cn','%5C%5Cn',false)Conditional_Jump('1',false,'base64',10)字符转十六进制('空格')Return()Label('base64')Base64编码('A-Za-z0-9%2B/%3D')&input=U29tZSBkYXRhIHdpdGggYSAxIGluIGl0ClNvbWUgZGF0YSB3aXRoIGEgMiBpbiBpdA">不同的输入数据用不同的操作流程</a>
                  </li>
                  <li><a
                      href="#recipe=Register('key%3D(%5B%5C%5Cda-f%5D*)',true,false)查找/替换(%7B'option':'正则表达式','string':'.*data%3D(.*)'%7D,'$1',true,false,true)RC4(%7B'option':'十六进制','string':'$R0'%7D,'十六进制','Latin1')&input=aHR0cDovL21hbHdhcmV6LmJpei9iZWFjb24ucGhwP2tleT0wZTkzMmE1YyZkYXRhPThkYjdkNWViZTM4NjYzYTU0ZWNiYjMzNGUzZGIxMQ">把输入的一部分作为流程参数</a>
                  </li>
                </ul>
              </div><br><a class="btn btn-primary" data-toggle="collapse" data-target="#faq-load-files">我能直接载入文件吗？</a>
              <div class="collapse" id="faq-load-files">
                <p>可以！直接把文件拖到输入区域就可以了。</p>
                <p>根据你的浏览器，最大差不多可以处理2GB的数据，但是这么大的数据，有些操作可能会非常慢。</p>
                <p>如果输出内容大小大于某个值（默认<a
                    href="#recipe=求积('换行')单位转换：数据('字节%20(B)','兆字节%20(MiB)')&input=MTAyNAoxMDI0">1MiB</a>），输出会变成文件链接供下载。你可以预览文件当中的一些内容。
                </p>
              </div><br><a class="btn btn-primary" data-toggle="collapse" data-target="#faq-fork">怎样对多个输入值使用同一个操作？</a>
              <div class="collapse" id="faq-fork">
                <p>打个比方，你有10个时间戳或者16个用同一个key加密的字符串。</p>
                <p>“Fork”操作（在“流程控制”分类）会按照给定的分隔符对输入进行分割，然后对每个部分进行相同的操作，在输出框按行显示。</p>
                <p><a
                    href="#recipe=Fork('%5C%5Cn','%5C%5Cn',false)从UNIX时间戳提取('秒%20(s)')&input=OTc4MzQ2ODAwCjEwMTI2NTEyMDAKMTA0NjY5NjQwMAoxMDgxMDg3MjAwCjExMTUzMDUyMDAKMTE0OTYwOTYwMA">点此</a>查看范例。
                </p>
              </div><br><a class="btn btn-primary" data-toggle="collapse" data-target="#faq-magic">“Magic”操作是什么？</a>
              <div class="collapse" id="faq-magic">
                <p>“Magic”操作会根据输入内容自动尝试解码。原理请查阅<a
                    href="https://github.com/gchq/CyberChef/wiki/Automatic-detection-of-encoded-data-using-CyberChef-Magic"
                    target="_blank">CyberChef的原始文档</a>。</p>
              </div>
            </div>
            <div role="tabpanel" class="tab-pane" id="report-bug"><br>
              <p>如果你发现BUG，请在原版CyberChef尝试复现：<a href="https://gchq.github.io/CyberChef/"
                  target="_blank">点此前往</a>。如果可以复现，请提交至CyberChef。如果是我搞砸了，请用下面的链接提交给我。</p><br>
              <pre id="report-bug-info"></pre><br><a class="btn btn-primary"
                href="https://github.com/Raka-loah/SRK-Toolbox/issues" role="button">在Raka-loah的GitHub提交issue</a>
            </div>
            <div role="tabpanel" class="tab-pane" id="about" style="padding:20px">
              <p>以下是CyberChef的原版内容，我不想努力翻译了：</p>
              <h5><strong>What</strong></h5>
              <p>A simple, intuitive web app for analysing and decoding data without having to deal with complex tools
                or programming languages. CyberChef encourages both technical and non-technical people to explore data
                formats, encryption and compression.</p><br>
              <h5><strong>Why</strong></h5>
              <p>Digital data comes in all shapes, sizes and formats in the modern world – CyberChef helps to make sense
                of this data all on one easy-to-use platform.</p><br>
              <h5><strong>How</strong></h5>
              <p>The interface is designed with simplicity at its heart. Complex techniques are now as trivial as
                drag-and-drop. Simple functions can be combined to build up a "recipe", potentially resulting in complex
                analysis, which can be shared with other users and used with their input.</p>
              <p>For those comfortable writing code, CyberChef is a quick and efficient way to prototype solutions to a
                problem which can then be scripted once proven to work.</p><br>
              <h5><strong>Who</strong></h5>
              <p>It is expected that CyberChef will be useful for cybersecurity and antivirus companies. It should also
                appeal to the academic world and any individuals or companies involved in the analysis of digital data,
                be that software developers, analysts, mathematicians or casual puzzle solvers.</p><br>
              <h5><strong>Aim</strong></h5>
              <p>It is hoped that by releasing CyberChef through <a href="https://github.com/gchq/CyberChef">GitHub</a>,
                contributions can be added which can be rolled out into future versions of the tool.</p><br><br>
              <p>There are <span class="num-ops">hundreds of</span> useful operations in CyberChef for anyone working on
                anything vaguely Internet-related, whether you just want to convert a timestamp to a different format,
                decompress gzipped data, create a SHA3 hash, or parse an X.509 certificate to find out who issued it.
              </p>
              <p>It’s the Cyber Swiss Army Knife.</p>
            </div>
            <div role="tabpanel" class="tab-pane" id="keybindings" style="padding:20px">
              <table class="table table-condensed table-bordered table-hover" id="keybList"></table>
            </div>
          </div>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button></div>
        <a href="https://github.com/Raka-loah/SRK-Toolbox"><img aria-hidden="true"
            style="position:absolute;top:0;right:0;border:0" src="images/fork_me.png" alt="Fork me on GitHub"></a>
      </div>
    </div>
  </div>
  <div class="modal fade" id="confirm-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="confirm-title"></h5>
        </div>
        <div class="modal-body" id="confirm-body"></div>
        <div class="modal-footer"><button type="button" class="btn btn-success" id="confirm-yes">是</button> <button
            type="button" class="btn btn-danger" id="confirm-no" data-dismiss="modal">否</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="input-tab-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title">查找输入标签</h5>
        </div>
        <div class="modal-body" id="input-tab-body">
          <h6>载入状态</h6>
          <div id="input-find-options">
            <ul id="input-find-options-checkboxes">
              <li class="checkbox input-find-option"><label for="input-show-pending"><input type="checkbox"
                    id="input-show-pending" checked=""> 等待中</label></li>
              <li class="checkbox input-find-option"><label for="input-show-loading"><input type="checkbox"
                    id="input-show-loading" checked=""> 载入中</label></li>
              <li class="checkbox input-find-option"><label for="input-show-loaded"><input type="checkbox"
                    id="input-show-loaded" checked=""> 已载入</label></li>
            </ul>
          </div>
          <div class="form-group input-group">
            <div class="toggle-string"><label for="input-filter" class="bmd-label-floating toggle-string">正则过滤</label>
              <input type="text" class="form-control toggle-string" id="input-filter"></div>
            <div class="input-group-append"><button class="btn btn-secondary dropdown-toggle" id="input-filter-button"
                type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">CONTENT</button>
              <div class="dropdown-menu toggle-dropdown"><a class="dropdown-item" id="input-filter-content"
                  title="内容">Content</a> <a class="dropdown-item" id="input-filter-filename" title="文件名">Filename</a>
              </div>
            </div>
          </div>
          <div class="form-group input-find-option" id="input-num-results-container"><label for="input-num-results"
              class="bmd-label-floating">结果数量</label> <input type="number" class="form-control" id="input-num-results"
              value="20" min="1"></div>
          <div style="clear:both"></div>
          <h6>查找结果</h6>
          <ul id="input-search-results"></ul>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-primary" id="input-filter-refresh">刷新</button>
          <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="output-tab-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title">查找输出标签</h5>
        </div>
        <div class="modal-body" id="output-tab-body">
          <h6>执行状态</h6>
          <div id="output-find-options">
            <ul id="output-find-options-checkboxes">
              <li class="checkbox output-find-option"><label for="output-show-pending"><input type="checkbox"
                    id="output-show-pending" checked=""> 等待中</label></li>
              <li class="checkbox output-find-option"><label for="output-show-baking"><input type="checkbox"
                    id="output-show-baking" checked=""> 执行中</label></li>
              <li class="checkbox output-find-option"><label for="output-show-baked"><input type="checkbox"
                    id="output-show-baked" checked=""> 已执行</label></li>
              <li class="checkbox output-find-option"><label for="output-show-stale"><input type="checkbox"
                    id="output-show-stale" checked=""> 已过期</label></li>
              <li class="checkbox output-find-option"><label for="output-show-errored"><input type="checkbox"
                    id="output-show-errored" checked=""> 报错</label></li>
            </ul>
            <div class="form-group output-find-option"><label for="output-content-filter"
                class="bmd-label-floating">正则过滤</label> <input type="text" class="form-control"
                id="output-content-filter"></div>
            <div class="form-group output-find-option" id="output-num-results-container"><label for="output-num-results"
                class="bmd-label-floating">结果数量</label> <input type="number" class="form-control"
                id="output-num-results" value="20"></div>
          </div><br>
          <h6>结果</h6>
          <ul id="output-search-results"></ul>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-primary" id="output-filter-refresh">刷新</button>
          <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="download-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content" data-help-proxy="a[data-target='#download-modal']">
        <div class="modal-header">
          <h5 class="modal-title">下载SRK Toolbox</h5>
        </div>
        <div class="modal-body">
          <p>SRK Toolbox整个运行在本地浏览器中，没有服务器端组件，这意味着你的输入数据、你的操作流程设定不会被发送出去，无论你使用在线版还是离线版，只要是官方开源原版，都会是这样。</p>
          <p>有三个操作会产生网络请求，“在地图上显示”会从wikimedia.org下载地图图片，“DNS over
            HTTPS”操作会向服务器发起DNS请求，以及“HTTP请求”操作会发起HTTP请求。你可以用浏览器的开发者工具（F12）的网络选项卡来监控网络请求情况。</p>
          <p>如果你想下载一份离线版用于没网可上的场景，你可以在下方下载一份包含整个程序的ZIP压缩包。可以直接在本地打开使用，或者部署到Web服务器，无需额外设置。</p>
          <p>注意：离线版没有自动更新功能，新版需要自行手动更新。</p>
          <h6>SRK Toolbox v10.19.4</h6>
          <ul>
            <li>编译时间： 08/01/2025 08:12:26 UTC</li>
            <li>Changelog： <a href="https://github.com/Raka-loah/SRK-Toolbox/blob/v10.19.4/CHANGELOG.md">点此</a></li>
            <li>&copy; Crown Copyright 2016 / Raka-loah@github 2023-2025</li>
            <li>Released under the Apache Licence, Version 2.0</li>
            <li>SHA256 hash: DOWNLOAD_HASH_PLACEHOLDER</li>
          </ul><a href="SRK_Toolbox_v10.19.4.zip" download class="btn btn-outline-primary">下载离线版ZIP压缩包</a>
        </div>
        <div class="modal-footer"><button type="button" class="btn btn-primary" data-dismiss="modal">确定</button></div>
      </div>
    </div>
  </div>
  <div class="modal fade" id="help-modal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title"><i class="material-icons modal-icon">info_outline</i> <span id="help-title"></span>
          </h5>
        </div>
        <div class="modal-body"></div>
        <div class="modal-footer"><button type="button" class="btn btn-primary" id="help-ok"
            data-dismiss="modal">确定</button></div>
      </div>
    </div>
  </div>
</body>
<script>document.addEventListener('contextmenu', (event) => { event.preventDefault(); });</script>

</html>